//
// Created by root on 2022/3/17.
//


/**
 * 不考虑溢出，假设传入的是普通的10进制浮点数，第一位不能是点
 * 1. 先确定正负数
 * 2. 确定整数是从哪位到哪位，一共几位
 * 3. 确定小数位一共多少位
 * 4. 累加
 * @param line 字符串
 * @return d
 */
double atof(const char line[]) {

    /*
     * flag           正负数符号 1/-1
     */
    int flag, i;
    // 最后结果
    double result;
    // 临时保存字符串中的字符
    char c;
    // 计算小数用
    double power = 1.0;

    result = 0;

    if (line[0] == '-' || line[0] == '+') {
        i = 1;
        if (line[0] == '-') {
            flag = -1;
        } else {
            flag = 1;
        }
    } else {
        flag = 1;
        i = 0;
    }
    // 计算整数
    for (; (c = line[i]) != '\0' && c != '\n' && c != '.'; ++i) {
        result = result * 10 + (c - '0');
    }
    i++;
    for (; (c = line[i]) != '\0' && c != '\n'; ++i) {
        result = result * 10 + (c - '0');
        power *= 10;
    }

    return result / power * flag;
}

int atoi(const char line[]){
    return (int) atof(line);
}
